home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 23 / AACD 23.iso / AACD / Programming / tek / kn / elate / visual / getnextinput.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-05-12  |  2.6 KB  |  155 lines

  1.  
  2. #include "tek/visual.h"
  3. #include "tek/kn/visual.h"
  4. #include "tek/kn/elate/visual.h"
  5.  
  6. #include <elate/taort.h>
  7. #include <elate/elate.h>
  8. #include <elate/ave.h>
  9.  
  10. #include <stdio.h>
  11.  
  12. /* 
  13. **    TEKlib
  14. **    (C) 1999-2001 TEK neoscientists
  15. **    all rights reserved.
  16. **
  17. **    TBOOL kn_getnextinput(TAPTR v, TIMSG *newimsg, TUINT eventmask)
  18. **
  19. */
  20.  
  21. #define    EV_DIALOG_RESIZE    8196
  22. #define    EV_QUIT                9
  23.  
  24. #define    EV_TRACKING            3
  25. #define    EV_BUTTONUP            4
  26. #define    EV_BUTTONDOWN        5
  27.  
  28.  
  29. TBOOL kn_getnextinput(TAPTR vis, TIMSG *newimsg, TUINT eventmask)
  30. {
  31.     TINT ev;
  32.     TINT x,y;
  33.     TUINT keycooked, buttonstate;
  34.     TBOOL resize = TFALSE;
  35.     TBOOL newevent;
  36.     
  37.     struct visual_elate *v = (struct visual_elate *) vis;
  38.     
  39.     newimsg->type = TITYPE_NONE;
  40.  
  41.  
  42.     if (v->evtpending)
  43.     {
  44.         ev = v->pendingevent;
  45.         x = v->pendingx;
  46.         y = v->pendingy;
  47.         keycooked = v->pendingkeycooked;
  48.         resize = v->pendingresize;
  49.         buttonstate = v->pendingbuttonstate;
  50.         newevent = TTRUE;
  51.         v->evtpending = TFALSE;
  52.     }
  53.     else
  54.     {
  55.         newevent = getevent(vis, &ev, &x, &y, &keycooked, &resize, &buttonstate);
  56.     }
  57.         
  58.     
  59.     if (newevent)
  60.     {
  61.  
  62.         if (resize)
  63.         {
  64.             newimsg->type = TITYPE_VISUAL_NEWSIZE;
  65.             goto skip;
  66.         }
  67.         
  68.         switch (ev)
  69.         {
  70.             case EV_QUIT:
  71.                 newimsg->type = TITYPE_VISUAL_CLOSE;
  72.                 break;
  73.     
  74.             case EV_TRACKING:
  75.                 newimsg->type = TITYPE_MOUSEMOVE;
  76.                 newimsg->mousex = x;
  77.                 newimsg->mousey = y;
  78.                 break;
  79.     
  80.             case EV_BUTTONUP:
  81.                 if (buttonstate == 1)
  82.                 {
  83.                     newimsg->code = TMBCODE_LEFTUP;
  84.                 }
  85.                 else if (buttonstate == 2)
  86.                 {
  87.                     newimsg->code = TMBCODE_RIGHTUP;
  88.                 }
  89.                 else break;
  90.                 
  91.                 newimsg->type = TITYPE_MOUSEBUTTON;
  92.                 newimsg->mousex = x;
  93.                 newimsg->mousey = y;
  94.                 break;
  95.     
  96.             case EV_BUTTONDOWN:
  97.                 if (buttonstate == 1)
  98.                 {
  99.                     newimsg->code = TMBCODE_LEFTDOWN;
  100.                 }
  101.                 else if (buttonstate == 2)
  102.                 {
  103.                     newimsg->code = TMBCODE_RIGHTDOWN;
  104.                 }
  105.                 else break;
  106.                 
  107.                 newimsg->type = TITYPE_MOUSEBUTTON;
  108.                 newimsg->mousex = x;
  109.                 newimsg->mousey = y;
  110.                 break;
  111.         
  112.             case EV_KEYDOWN:
  113.                 switch (keycooked)
  114.                 {
  115.                     case 27:
  116.                         newimsg->type = TITYPE_KEY;
  117.                         newimsg->code = TKEYCODE_ESC;
  118.                         break;
  119.     
  120.                     case 8:
  121.                         newimsg->type = TITYPE_KEY;
  122.                         newimsg->code = TKEYCODE_BCKSPC;
  123.                         break;
  124.     
  125.                     case 9:
  126.                         newimsg->type = TITYPE_KEY;
  127.                         newimsg->code = TKEYCODE_TAB;
  128.                         break;
  129.     
  130.                     case 13:
  131.                         newimsg->type = TITYPE_KEY;
  132.                         newimsg->code = TKEYCODE_ENTER;
  133.                         break;
  134.     
  135.                     case 127:
  136.                         newimsg->type = TITYPE_KEY;
  137.                         newimsg->code = TKEYCODE_DEL;
  138.                         break;
  139.     
  140.                     default:
  141.                         newimsg->type = TITYPE_KEY;
  142.                         newimsg->code = keycooked;
  143.                         break;
  144.                 }
  145.                 break;
  146.         }
  147.     }
  148.  
  149. skip:
  150.  
  151.     return (newimsg->type & eventmask);
  152. }
  153.  
  154.  
  155.